package com.hugh.simple;
/**
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 *
 * 示例 1:
 *
 * 输入: 123
 * 输出: 321
 *  示例 2:
 *
 * 输入: -123
 * 输出: -321
 * 示例 3:
 *
 * 输入: 120
 * 输出: 21
 * 注意:
 *
 * 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−231,  231 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 * 取余运算在取c的值时，向0 方向舍入(fix()函数)；而取模运算在计算c的值时，向负无穷方向舍入(floor()函数)。
 * 取余运算，余数符号和被除数一致；取模运算，余数符号和除数一致。
 *注意：Java的/整除运算和%取余运算，商向零靠近，
 */

/**
 * @author 杜浩
 */
public class ReverseIntegerSolution {
    public int reverse(int x){
        int rev = 0;
        int pop = 0;
        while(x!=0) {
            pop = x % 10;
            // 上溢
            if (Integer.MAX_VALUE/10 < rev || (rev == Integer.MAX_VALUE/10 && pop > 7)) {
                return 0;
            }

            // 下溢
            if (Integer.MIN_VALUE / 10 > rev || (rev == Integer.MIN_VALUE / 10 && pop < -8)) {
                return 0;
            }
            rev = rev * 10 + pop;
            x /= 10;
        }
        return rev;
    }
}
